#!/usr/bin/env python
# coding: utf-8

"""
Modelo de URL para busca:
http://databases.unesco.org/xtrans/a/openisis.a?sl=POR&udc=0&tie=and&t3=1&t4=1000

Parâmetros:

 - sl: source language
 - udc: código na CDU (Classificação Decimal Universal)
 - tie: operador lógico (minha suposição - LR)
 - t3: início do lote de resultados (para paginação)
 - t4: número de itens por página (valores > 1000 são reduzidos a 1000)
 
"""

from urllib import urlopen
from BeautifulSoup import BeautifulSoup

CODIGOS_UDC = (
    (0, "Generalities, Bibliography..."),
    (1, "Philosophy, Psychology"),
    (2, "Religion, Theology"),
    (3, "Law, Social Sciences, Education"),
    (5, "Natural and Exact Sciences"),
    (6, "Applied Sciences"),
    (7, "Arts, Games, Sport"),
    (8, "Litterature"),
    (9, "History, Geography, Biography"),
)

#MASCARA_NOME_ARQ = 'cache/orig-PT_udc-%(udc)s-%(inicio)04d.html'
MASCARA_NOME_ARQ = 'cache/dest-PT_udc-%(udc)s-%(inicio)05d.html'

MAX_REGS = 1000

# URL_BASE = '''http://databases.unesco.org/xtrans/a/openisis.a?sl=POR&udc=%(udc)d&tie=and&t3=%(inicio)d&t4='''
URL_BASE = '''http://databases.unesco.org/xtrans/a/openisis.a?l=POR&udc=%(udc)d&tie=and&t3=%(inicio)d&t4=''' 

URL_BASE += str(MAX_REGS)

def obter_num_regs(html):
    sopa = BeautifulSoup(html)
    tag = sopa.find('small')
    assert len(tag.contents) == 1
    return int(tag.contents[0].split('/')[1])

for udc, descr in CODIGOS_UDC:
    inicio = 1
    while True:
        params = {'udc':udc,'inicio':inicio}
        url = URL_BASE % params
        pg = urlopen(url)
        html = pg.read()
        saida = file(MASCARA_NOME_ARQ % params, 'w')
        saida.write(html)
        saida.close()
        if inicio == 1:
            num_regs = obter_num_regs(html)
            print '-' * 20, 'udc: %s  num_regs: %s' % (udc, num_regs)
        print params
        inicio += MAX_REGS
        if inicio > num_regs:
            break
            

            
